package utility

import (
	"encoding/json"

	"github.com/gogf/gf/v2/frame/g"
)

// ParseImagesJson 将JSON格式图片数据解析为字符串数组
// 支持三种输入:
// 1. json.RawMessage类型的JSON数据
// 2. 字节数组类型的JSON数据
// 3. 字符串类型的JSON数据或URL(向后兼容)
func ParseImagesJson(imageData interface{}) []string {
	var imageArray []string

	switch v := imageData.(type) {
	case json.RawMessage:
		// 直接解析JSON原始数据
		if err := json.Unmarshal(v, &imageArray); err != nil {
			g.Log().Errorf(nil, "解析JSON原始数据失败: %v", err)
		}
	case []byte:
		// 解析字节数组
		if err := json.Unmarshal(v, &imageArray); err != nil {
			g.Log().Errorf(nil, "解析字节数组失败: %v", err)
		}
	case string:
		if v == "" || v == "[]" {
			return []string{}
		}

		// 尝试解析JSON字符串
		if err := json.Unmarshal([]byte(v), &imageArray); err != nil {
			// 解析失败则当作单URL处理
			return []string{v}
		}
	}

	return imageArray
}

// GetFirstImage 获取图片数组中的第一张图片
// 如果没有图片，返回空字符串
func GetFirstImage(imageData interface{}) string {
	images := ParseImagesJson(imageData)
	if len(images) > 0 {
		return images[0]
	}
	return ""
}
